package com.carrey.carrey_utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 	
 * @Title: 数据工具类
 * @Description 
 * @author Carre
 * @date 2020-12-16
 */
public class NumberUtils {
	
	// 数字正则表达式
    private static String NUMBER_REG = "^\\d+$";
    // 实数正则表达式（是有理数和无理数的总称）
    private static String REAL_REG =  "^(-)?[0-9]+(\\.[0-9]+)?$";
    
    /**
     * 	判断出入字符串是否全为数字
     * @param src
     * @return
     */
    public static boolean isNumber(String src) {
        return StringUtils.hasText(src) &&  src.matches(NUMBER_REG);
    }
    
    /**
     * 	判断出入字符串是否全为实数
     * @param src
     * @return
     */
    public static boolean isReal(String src) {
        return StringUtils.hasText(src) &&  src.matches(REAL_REG);
    }
    
    /**
     * 	加法运算
     * @param v1
     * @param v2
     * @return
     */
    public static double add(double v1, double v2) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        return bd1.add(bd2).doubleValue();
    }
    
    /**
     * 	减法运算
     * @param v1
     * @param v2
     * @return
     */
    public static double sub(double v1, double v2) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        return bd1.subtract(bd2).doubleValue();
    }
    
    
    /**
     * 	乘法运算
     * @param v1
     * @param v2
     * @return
     */
    public static double mul(double v1, double v2) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        return bd1.multiply(bd2).doubleValue();
    }
    
    /**
     * 	除法运算
     * @param v1
     * @param v2
     * @return
     */
    public static double div(double v1, double v2, int  scale) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        return bd1.divide(bd2, scale,  RoundingMode.HALF_UP).doubleValue();
    }
    /**
     * 	提供精确的小数位四舍五入处理
     * @param v
     * @param scale
     * @return
     */
    public static double round(double v, int scale) {
        BigDecimal bd = new BigDecimal(v + "");
        return bd.setScale(scale,  RoundingMode.HALF_UP).doubleValue();
    }
    
    
}
